﻿
namespace SistemaLogistica.Windows.Forms.Administracion
{
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using EDOSwit.Controls.Helpers;
    using EDOSwit.Controls.Types;
    using EDOSwit.Controls.UserControls;
    using SistemaLogistica.Business.Entities;
    using SistemaLogistica.Business.Logic;
    using SistemaLogistica.Windows.Helpers;

    public partial class CwfSucursales : MantenedorSeguro
    {
        public CwfSucursales()
        {
            InitializeComponent();
        }

        protected override void LoadPermisos()
        {
            this.TsMenu.Permisos.AddRange(Metodos.GetPermisos(Convert.ToByte(this.Tag)));
        }

        protected override void FocusKeyPress(object sender, KeyPressEventArgs e)
        {
            base.FocusKeyPress(sender, e);
        }

        protected override void InitialLoad()
        {
            try
            {
                this.cmbDepartamento.DisplayMember = "Departamento";
                this.cmbDepartamento.ValueMember = "IdDepartamento";

                this.cmbProvincia.DisplayMember = "Provincia";
                this.cmbProvincia.ValueMember = "IdProvincia";

                this.cmbDistrito.DisplayMember = "Distrito";
                this.cmbDistrito.ValueMember = "IdDistrito";

                this.MantenedorBindingSource.DataSource = SucursalManager.Instancia.Listar();
                this.dgvMantenedor.DataSource = this.MantenedorBindingSource;
                this.cmbDepartamento.DataSource = UbigeoManager.Instancia.ListarDepartamentos();
              
                OcultarColumnas();
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, this.Titulo, ex.Message);
            }
        }

        protected override void EventoNuevo()
        {
            this.cmbDepartamento.Focus();
            this.BloquearCombos(false);
        }

        protected override void EventoEditar()
        {
            this.cmbDepartamento.Focus();
            this.BloquearCombos(false);
        }

        private void BloquearCombos(bool valor)
        {
            this.cmbProvincia.Enabled = valor;
            this.cmbDistrito.Enabled = valor;
        }

        private void OcultarColumnas()
        {
            this.dgvMantenedor.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            this.dgvMantenedor.Columns["IdSucursal"].HeaderText = "ID";
        }

        protected override void LoadData(object obj)
        {
            Sucursal  sucursal = obj as Sucursal ;
            if (sucursal != null)
            {
                this.cmbDepartamento.SelectedValue = sucursal.Ubigeo.IdDepartamento;
                this.cmbProvincia.SelectedValue = sucursal.Ubigeo.IdProvincia;
                this.cmbDistrito.SelectedValue = sucursal.Ubigeo.IdDistrito;
                this.txtDireccion.Text = sucursal.Direccion;
                this.txtTelefono.Text = sucursal.Telefono;
                this.chkPrincipal.Checked = sucursal.EsPrincipal;
                this.identificador = sucursal.IdSucursal;
            }
        }

        private void cmbDepartamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.cmbDepartamento.SelectedIndex != -1)
            {
                this.cmbProvincia.DataSource = UbigeoManager.Instancia.ListarProvincias(Convert.ToInt32(this.cmbDepartamento.SelectedValue));
                this.cmbProvincia.Enabled = true;
            }
        }

        private void cmbProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.cmbDepartamento.SelectedIndex != -1)
            {
                this.cmbDistrito.DataSource = UbigeoManager.Instancia.ListarDistritos(Convert.ToInt32(this.cmbDepartamento.SelectedValue), Convert.ToInt32(this.cmbProvincia.SelectedValue));
                this.cmbDistrito.Enabled = true;
            }
        }

        protected override void ClearControls()
        {
            this.identificador = 0;
            base.ClearControls();
        }

        private Sucursal GetSucursal()
        {
            return new Sucursal
            {
                IdSucursal = Convert.ToInt32(this.identificador),
                Telefono = this.txtTelefono.Text.Trim(),
                Direccion = this.txtDireccion.Text.Trim(),
                Ubigeo = new SistemaLogistica.Business.Entities.Ubigeo { IdUbigeo = UbigeoManager.Instancia.ListarIDPorDPD(Convert.ToInt32(this.cmbDepartamento.SelectedValue), Convert.ToInt32(this.cmbProvincia.SelectedValue), Convert.ToInt32(this.cmbDistrito.SelectedValue)) },
                EsPrincipal = this.chkPrincipal.Checked
            };
        }

        protected override bool SaveData()
        {
            bool result = false;
            int posicion = this.MantenedorBindingSource.Position;
            try
            {
                switch (this.estadoActual)
                {
                    case EstadoActual.Nuevo:
                        SucursalManager.Instancia.Agregar(GetSucursal());
                        break;
                    case EstadoActual.Editar:
                        SucursalManager.Instancia.Modificar(GetSucursal());
                        break;
                    case EstadoActual.Eliminar:
                        SucursalManager.Instancia.Eliminar(Convert.ToInt32(this.identificador));
                        posicion -= 1;
                        break;
                    default:
                        break;
                }

                result = true;
                InitialLoad();
                this.MantenedorBindingSource.Position = posicion;
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, this.Titulo, ex.Message);
            }
            return result;
        }

        protected override bool ValidateData()
        {
            bool result = true;

            if (string.IsNullOrEmpty(this.txtDireccion.Text.Trim()))
            {
                this.errValidator.SetError(this.txtDireccion, "Ingresar Direccion.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.txtDireccion, string.Empty);
            }
            if (string.IsNullOrEmpty(this.txtTelefono.Text))
            {
                this.errValidator.SetError(this.txtTelefono, "Ingresar Telefono.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.txtTelefono, string.Empty);
            }
            if (this.cmbDepartamento.SelectedIndex == -1)
            {
                this.errValidator.SetError(this.cmbDepartamento, "Seleccionar Departamento.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.cmbDepartamento, string.Empty);
            }
            if (this.cmbProvincia.SelectedIndex == -1)
            {
                this.errValidator.SetError(this.cmbProvincia, "Seleccionar Provincia.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.cmbProvincia, string.Empty);
            }
            if (this.cmbDistrito.SelectedIndex == -1)
            {
                this.errValidator.SetError(this.cmbDistrito, "Seleccionar Distrito.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.cmbDistrito, string.Empty);
            }
            if (SucursalManager.Instancia.ExistePrincipal() && chkPrincipal.Checked == true)
            {
                this.errValidator.SetError(this.chkPrincipal, "Ya hay una sede Principal.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.chkPrincipal, string.Empty);
            }
            return result;
        }

        protected override void BuscarData()
        {
            try
            {
                this.MantenedorBindingSource.DataSource = SucursalManager.Instancia.Buscar(this.txtBuscar.Text);
                this.dgvMantenedor.DataSource = this.MantenedorBindingSource;
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, this.Titulo, ex.Message);
            }
        }
    }
}
